<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarAccidentRecordDetail;
use App\Models\CarModels\CarAccidentRecordDetailFiles;
use App\Models\CarModels\CarInsuranceRecordBillFile;
use App\Models\CarModels\CarInsuranceRecordsKind;
use App\Models\CarModels\CarPunishRecord;
use App\Models\CarModels\CarRepairRecord;
use App\Models\CarModels\CarRepairRecordDetail;
use App\Models\CarModels\CarRepairRecordDetailFiles;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
use Validator;
/**
 * @group 设备管理->任务管理->事故记录 事故维修细则
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class CarAccidentRecordDetailController extends Controller
{

    /**
     * 运营管理->维修记录->维修记录详情->维修清单
     *
     * @queryParam record_id 清单对应的维修记录信息
     * @queryParam name  名称
     * @queryParam unit  单位
     * @queryParam number 数量
     * @queryParam price  单价
     */
    public function index(Request $request){

        $query = new CarAccidentRecordDetail();
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);

    }

    /**
     * 运营管理->维修记录->维修记录详情->维修清单 添加
     *
     * @queryParam record_id 清单对应的维修记录信息
     * @queryParam name  名称
     * @queryParam unit  单位
     * @queryParam number 数量
     * @queryParam price  单价
     *
     *
     * @bodyParam record_id int required 清单对应的维修记录信息
     * @bodyParam name string required 名称
     * @bodyParam unit string required 单位
     * @bodyParam number int required 数量
     * @bodyParam price float required 单价
     * @bodyParam files string optional 文件id号
     *
     */
    public function store(Request $request){


        $validator = CarAccidentRecordDetail::make($request->all(),genValidate());
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        DB::beginTransaction();
        try{
            if ($request->has('repairrecorddetail')){
                    $data=json_decode($request->get('repairrecorddetail'),true);
                    if (!$data)
                        return response()->json(encodeMsg(["message"=>"repairrecorddetail数据格式出错"],400),400);
                    foreach ($data as $k=>$v){
                        try{
                            CarAccidentRecordDetail::create($v);
                        }catch (QueryException $e){
                            \Illuminate\Support\Facades\DB::rollBack();
                            return response()->json(encodeMsg($e->getMessage(),500),500);
                        }

                    }
            }else{
                $data=CarAccidentRecordDetail::create($request->all());
            }

            if($request->has('files')){
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['f_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    CarAccidentRecordDetailFiles::insert($file_data);
                }catch (\Exception $e){
                    DB::rollBack();
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加或者图片id是否重复"],404), 404);
                }
            }
            DB::commit();
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            DB::rollBack();
            return response()->json(encodeMsg(["message"=>"数据添加出错"],400),400);
        }
    }

    /**
     * @queryParam record_id 清单对应的维修记录信息
     * @queryParam name  名称
     * @queryParam unit  单位
     * @queryParam number 数量
     * @queryParam price  单价
     *
     */
    public function show($pk){


        $data = CarAccidentRecordDetail::with('files')->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该维修记录"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     * 维修记录修改
     *
     *
     * @queryParam record_id 清单对应的维修记录信息
     * @queryParam name  名称
     * @queryParam unit  单位
     * @queryParam number 数量
     * @queryParam price  单价
     *
     *
     * @bodyParam record_id int optional 清单对应的维修记录信息
     * @bodyParam name string optional 名称
     * @bodyParam unit string optional 单位
     * @bodyParam number int optional 数量
     * @bodyParam price float optional 单价
     * @bodyParam files string optional 文件id号
     *
     */
    public function update(Request $request, $pk){


        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $row = CarAccidentRecordDetail::find($pk);
//        if($row == []){
//            return response()->json(encodeMsg(["message"=>"没有该维修记录"],404),404);
//        }
        try {
            DB::beginTransaction();
            if ($request->has('repairrecorddetail')){
                $data=json_decode($request->get('repairrecorddetail'),true);
                if (!$data)
                    return response()->json(encodeMsg(["message"=>"repairrecorddetail数据格式出错"],400),400);
                CarRepairRecord::where('record_id',$pk)->delete();
                foreach ($data as $k=>$v){
                    try{
                        CarAccidentRecordDetail::create($v);
                    }catch (QueryException $e){
                        \Illuminate\Support\Facades\DB::rollBack();
                        return response()->json(encodeMsg($e->getMessage(),500),500);
                    }

                }
            }else{
                $row->update($request->all());
            }
            if($request->has('files')){
                $origin_files = CarAccidentRecordDetailFiles::where('f_id',$row->id)->get()->toArray();//图片原来的id号是好多 取出来

                $origin_file_ids = array();//这个数组用于报错以前的所有file的id号
                if($origin_files != []){
                    foreach ($origin_files as $v){
                        array_push($origin_file_ids,$v['id']);
                    }
                }
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['f_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    CarAccidentRecordDetailFiles::whereIn('id',$origin_file_ids)->delete();
                    CarAccidentRecordDetailFiles::insert($file_data);
                }catch (\Exception $e){
                    DB::rollBack();
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加获取图片id重复".$e->getMessage()],404), 404);
                }
            }

            DB::commit();
            return response()->json(encodeMsg($data,200), 200);
        }catch (QueryException $e){
            DB::rollBack();
            return response()->json(encodeMsg(["message"=>"名字重复".$e->getMessage()],400),400);
        }
    }

    /**
     * 删除
     *
     */
    public function destroy($pk){
        $data = CarAccidentRecordDetail::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有记录"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
